{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"align-center\">\n",
    "<a href=\"https://oumi.ai/\"><img src=\"https://oumi.ai/docs/en/latest/_static/logo/header_logo.png\" height=\"200\"></a>\n",
    "\n",
    "[![Documentation](https://img.shields.io/badge/Documentation-latest-blue.svg)](https://oumi.ai/docs/en/latest/index.html)\n",
    "[![Discord](https://img.shields.io/discord/1286348126797430814?label=Discord)](https://discord.gg/oumi)\n",
    "[![GitHub Repo stars](https://img.shields.io/github/stars/oumi-ai/oumi)](https://github.com/oumi-ai/oumi)\n",
    "<a target=\"_blank\" href=\"https://colab.research.google.com/github/oumi-ai/oumi/blob/main/notebooks/Oumi - Evaluation with Oumi.ipynb\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>\n",
    "</div>\n",
    "\n",
    "👋 Welcome to Open Universal Machine Intelligence (Oumi)!\n",
    "\n",
    "🚀 Oumi is a fully open-source platform that streamlines the entire lifecycle of foundation models - from [data preparation](https://oumi.ai/docs/en/latest/resources/datasets/datasets.html) and [training](https://oumi.ai/docs/en/latest/user_guides/train/train.html) to [evaluation](https://oumi.ai/docs/en/latest/user_guides/evaluate/evaluate.html) and [deployment](https://oumi.ai/docs/en/latest/user_guides/launch/launch.html). Whether you're developing on a laptop, launching large scale experiments on a cluster, or deploying models in production, Oumi provides the tools and workflows you need.\n",
    "\n",
    "🤝 Make sure to join our [Discord community](https://discord.gg/oumi) to get help, share your experiences, and contribute to the project! If you are interested in joining one of the community's open-science efforts, check out our [open collaboration](https://oumi.ai/community) page.\n",
    "\n",
    "⭐ If you like Oumi and you would like to support it, please give it a star on [GitHub](https://github.com/oumi-ai/oumi)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Evaluation with Oumi\n",
    "\n",
    "This notebook provides a guide for running end-to-end evaluations on your trained model using Oumi. Specifically, it explores how the performance of LLaMA models evolves as we scale from 1B to 3B and 8B parameters."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Prerequisites and Environment\n",
    "\n",
    "❗**NOTICE:** We recommend running this notebook on a GPU. If running on Google Colab, you can use the free T4 GPU runtime (Colab Menu: `Runtime` -> `Change runtime type`). Llama 8B is too large to fit on the T4 GPU for inference. You can remove it from the list of models to evaluate, or evaluate the SmolLM family of models instead of Llama in the `Experimental Setup` section.\n",
    "\n",
    "### Oumi Installation\n",
    "\n",
    "First, let's install Oumi, AlpacaEval, and vLLM. You can find more detailed instructions about Oumi installation [here](https://oumi.ai/docs/en/latest/get_started/installation.html)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Note: you may need to restart the kernel to use updated packages.\n"
     ]
    }
   ],
   "source": [
    "%pip install oumi alpaca_eval vllm"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Llama Access\n",
    "\n",
    "Llama models are gated on HuggingFace Hub. To run this notebook, you must first complete the agreements for Llama [3.1](https://huggingface.co/meta-llama/Llama-3.1-8B-Instruct) and [3.2](https://huggingface.co/meta-llama/Llama-3.2-1B-Instruct) on HuggingFace, and wait for them to be accepted. Then, specify `HF_TOKEN` below to enable access to the model if it's not already set.\n",
    "\n",
    "Usually, you can get the token by running this command `cat ~/.cache/huggingface/token` on your local machine."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "\n",
    "if not os.environ.get(\"HF_TOKEN\"):\n",
    "    # NOTE: Set your Hugging Face token here if not already set.\n",
    "    os.environ[\"HF_TOKEN\"] = \"<MY_HF_TOKEN>\"\n",
    "\n",
    "hf_token = os.environ.get(\"HF_TOKEN\")\n",
    "print(f\"Using HF Token: '{hf_token}'\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### OpenAI Access\n",
    "\n",
    "AlpacaEval 2.0 calculates win rates by comparing a model's responses to reference responses. This process requires an annotator, with the default being [GPT-4 Turbo](https://github.com/tatsu-lab/alpaca_eval?tab=readme-ov-file#alpacaeval-20). To access the latest GPT-4 models, an OpenAI API key is necessary. You can find instructions for creating an OpenAI account and generating an API key on [OpenAI's quickstart webpage](https://platform.openai.com/docs/)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "os.environ[\"OPENAI_API_KEY\"] = \"<MY_OPENAI_TOKEN>\"  # Specify your OpenAI API key here"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<b>⚠️ Cost considerations</b>: The cost of running a standard AlpacaEval 2.0 evaluation and annotating 805 examples with GPT-4 Turbo is <b>$3.50</b>. You need to evaluate on the full dataset to reproduce the results presented in this notebook. However, if you are only interested in experimenting with the API, you can limit the evaluation to a smaller number of examples. For instance, annotating just 3 examples will cost less than <b>0.5¢</b>."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "NUM_ALPACA_EXAMPLES = 3  # Replace with None for full dataset evaluation.\n",
    "NUM_MMLU_EXAMPLES = 10  # Replace with None for full dataset evaluation."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Tutorial Directory Setup\n",
    "\n",
    "Finally, we will create a directory for the tutorial to store the results."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "from pathlib import Path\n",
    "\n",
    "tutorial_dir = \"./output/evaluation_tutorial/TEST_OUMI\"\n",
    "\n",
    "Path(tutorial_dir).mkdir(parents=True, exist_ok=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Experimental Setup\n",
    "\n",
    "In this experiment, we aim to compare the performance of models as we scale their size. For this purpose, we have selected LLaMA models with `1B`, `3B`, and `8B` parameters. In the code snippet below, you can specify any model hosted on HuggingFace, provide a path to a local directory containing your model, or use any other model format supported by Oumi inference. Additionally, note that we restrict the maximum number of tokens for each model to `8192` in order to optimize both cost and resource usage.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "MODEL_NAMES = [\n",
    "    \"meta-llama/Llama-3.2-1B-Instruct\",\n",
    "    \"meta-llama/Llama-3.2-3B-Instruct\",\n",
    "    \"meta-llama/Llama-3.1-8B-Instruct\",\n",
    "]\n",
    "MODEL_MAX_TOKENS = 8192\n",
    "\n",
    "# Alternative models to evaluate on Colab.\n",
    "# MODEL_NAMES = [\n",
    "#     \"HuggingFaceTB/SmolLM-135M-Instruct\",\n",
    "#     \"HuggingFaceTB/SmolLM-360M-Instruct\",\n",
    "#     \"HuggingFaceTB/SmolLM-1.7B-Instruct\",\n",
    "# ]\n",
    "# MODEL_MAX_TOKENS = 2048"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To conduct a comprehensive evaluation of a model's performance, it is essential to assess it across a [diverse set of benchmarks](https://oumi.ai/docs/en/latest/user_guides/evaluate/standardized_benchmarks.html#trade-offs). At a minimum, a [standardized benchmark](https://oumi.ai/docs/en/latest/user_guides/evaluate/standardized_benchmarks.html) is required to evaluate the model's knowledge and reasoning capabilities, while a [generative benchmark](https://oumi.ai/docs/en/latest/user_guides/evaluate/generative_benchmarks.html) is necessary to assess the quality of responses and its ability to follow instructions. In this evaluation, we select [MMLU Pro](https://arxiv.org/abs/2406.01574) for its focus on challenging, reasoning-intensive knowledge tasks and [AlpacaEval 2.0](https://arxiv.org/abs/2404.04475) for assessing the overall quality of the generated responses. To customize the evaluation tasks, please see [our documentation](https://oumi.ai/docs/en/latest/user_guides/evaluate/evaluation_config.html#configuration-options). "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from oumi.core.configs import EvaluationTaskParams\n",
    "\n",
    "TASKS = [\n",
    "    EvaluationTaskParams(\n",
    "        evaluation_backend=\"lm_harness\",\n",
    "        task_name=\"leaderboard_mmlu_pro\",\n",
    "        num_samples=NUM_MMLU_EXAMPLES,\n",
    "    ),\n",
    "    EvaluationTaskParams(\n",
    "        evaluation_backend=\"alpaca_eval\",\n",
    "        num_samples=NUM_ALPACA_EXAMPLES,\n",
    "    ),\n",
    "]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Evaluation\n",
    "\n",
    "To perform evaluations with Oumi, we define an [EvaluationConfig](https://oumi.ai/docs/en/latest/user_guides/evaluate/evaluation_config.html) for each model with the tasks discussed above, along with the relevant [model](https://github.com/oumi-ai/oumi/blob/main/src/oumi/core/configs/params/model_params.py) and [generation](https://github.com/oumi-ai/oumi/blob/main/src/oumi/core/configs/params/generation_params.py) parameters. If the system is equipped with a GPU, we strongly recommend configuring the [inference engine](https://oumi.ai/docs/en/latest/api/oumi.core.configs.html#oumi.core.configs.InferenceEngineType) to `VLLM` for optimal performance.\n",
    "\n",
    "The code snippet below illustrates how to run evaluations for our three models, storing the key metrics for each model in lists. Specifically, the length-controlled win rate for Alpaca is saved in `alpaca_lcwr`, while the accuracy for MMLU Pro is stored in `mmlu_acc`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "from oumi.core.configs import (\n",
    "    EvaluationConfig,\n",
    "    GenerationParams,\n",
    "    InferenceEngineType,\n",
    "    ModelParams,\n",
    ")\n",
    "from oumi.evaluate import evaluate\n",
    "\n",
    "# Store the results for 1B, 3B, 8B models in the following lists.\n",
    "mmlu_acc = []\n",
    "alpaca_lcwr = []\n",
    "\n",
    "for model_name in MODEL_NAMES:\n",
    "    # Define the evaluation configuration.\n",
    "    evaluation_config = EvaluationConfig(\n",
    "        tasks=TASKS,\n",
    "        model=ModelParams(model_name=model_name, model_max_length=MODEL_MAX_TOKENS),\n",
    "        generation=GenerationParams(max_new_tokens=MODEL_MAX_TOKENS),\n",
    "        inference_engine=InferenceEngineType.VLLM,\n",
    "        output_dir=tutorial_dir,\n",
    "    )\n",
    "\n",
    "    # Evaluate the model.\n",
    "    task_results = evaluate(evaluation_config)\n",
    "\n",
    "    # Store the results.\n",
    "    mmlu_acc.append(task_results[0][\"results\"][\"leaderboard_mmlu_pro\"][\"acc,none\"])\n",
    "    alpaca_lcwr.append(\n",
    "        task_results[1][\"results\"][\"alpaca_eval\"][\"length_controlled_winrate\"] / 100\n",
    "    )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Evaluation Results\n",
    "\n",
    "The evaluation results are shown below."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0.19772273936170212, 0.3041057180851064, 0.38040226063829785]\n",
      "[0.0864114369219142, 0.1973881863510852, 0.24729342554633926]\n"
     ]
    }
   ],
   "source": [
    "print(mmlu_acc)\n",
    "print(alpaca_lcwr)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "When visualizing the results using `matplotlib`'s `pyplot`, we observe a clear trend: both the model's knowledge and reasoning abilities (measured by MMLU Pro) and the quality of its responses (measured by AlpacaEval 2.0) improve as the model size increases. A notable performance gain is observed when scaling from 1B to 3B parameters. However, beyond this, the rate of improvement begins to plateau, indicating diminishing returns with further increases in model size."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# Data\n",
    "model_sizes = [1, 3, 8]\n",
    "plt.plot(model_sizes, mmlu_acc, label=\"MMLU Pro (Accuracy)\")\n",
    "plt.plot(model_sizes, alpaca_lcwr, label=\"AlpacaEval 2.0 (LC WR)\")\n",
    "\n",
    "# Show\n",
    "plt.xlabel(\"Model Size (Billion Parameters)\")\n",
    "plt.ylabel(\"Model Performance\")\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "oumi",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
